home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / DEMON / GNU / PDMake / c / check next >
Text File  |  1995-03-29  |  3KB  |  131 lines

  1. /* > c.check
  2.  *
  3.  *$Id: c.check 1.7 95/04/19 22:44:23 root Rel $
  4.  *
  5.  * $Log:    c.check $
  6.  * Revision 1.7  95/04/19  22:44:23  root
  7.  * Checked in for release
  8.  * 
  9.  * Revision 1.6  95/04/19  22:34:14  root
  10.  * Added MYNAME symbol in place of an argv[0] pathname
  11.  * 
  12.  * Revision 1.5  95/04/18  21:46:59  root
  13.  * *** empty log message ***
  14.  *
  15.  * Revision 1.4  95/04/18  21:41:48  root
  16.  * Tidied for release
  17.  *
  18.  * Revision 1.3  95/04/11  03:15:16  root
  19.  * Added Log messages
  20.  *
  21.  *      Check structures for make.
  22.  */
  23.  
  24. #include "h.h"
  25.  
  26.  
  27. /*
  28.  *      Prints out the structures as defined in memory.  Good for check
  29.  *      that you make file does what you want (and for debugging make).
  30.  */
  31. void
  32. prt(void)
  33. {
  34.         register struct name *          np;
  35.         register struct depend *        dp;
  36.         register struct line *          lp;
  37.         register struct cmd *           cp;
  38.         register struct macro *         mp;
  39.  
  40.  
  41.         for (mp = macrohead; mp; mp = mp->m_next)
  42.                 fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
  43.  
  44.         fputc('\n', stderr);
  45.  
  46.         for (np = namehead.n_next; np; np = np->n_next)
  47.         {
  48.                 if (np->n_flag & N_DOUBLE)
  49.                         fprintf(stderr, "%s::\n", np->n_name);
  50.                 else
  51.                         fprintf(stderr, "%s:\n", np->n_name);
  52.                 if (np == firstname)
  53.                         fprintf(stderr, "(MAIN NAME)\n");
  54.                 for (lp = np->n_line; lp; lp = lp->l_next)
  55.                 {
  56.                         fputc(':', stderr);
  57.                         for (dp = lp->l_dep; dp; dp = dp->d_next)
  58.                                 fprintf(stderr, " %s", dp->d_name->n_name);
  59.                         fputc('\n', stderr);
  60.  
  61.                         for (cp = lp->l_cmd; cp; cp = cp->c_next)
  62.                                 fprintf(stderr, "-\t%s\n", cp->c_cmd);
  63.                         fputc('\n', stderr);
  64.                 }
  65.                 fputc('\n', stderr);
  66.         }
  67. }
  68.  
  69.  
  70. /*
  71.  *      Recursive routine that does the actual checking.
  72.  */
  73. void check(struct name *np)
  74. {
  75.         register struct depend *        dp;
  76.         register struct line *          lp;
  77.  
  78.  
  79.         if (np->n_flag & N_MARK)
  80.                 fatal("Circular dependency from %s",(int) np->n_name);
  81.  
  82.         np->n_flag |= N_MARK;
  83.  
  84.         for (lp = np->n_line; lp; lp = lp->l_next)
  85.                 for (dp = lp->l_dep; dp; dp = dp->d_next)
  86.                         check(dp->d_name);
  87.  
  88.         np->n_flag &= ~N_MARK;
  89. }
  90.  
  91.  
  92. /*
  93.  *      Look for circular dependancies.
  94.  *      ie.
  95.  *              a: b
  96.  *              b: a
  97.  *      is a circular dep
  98.  */
  99. void
  100. circh(void)
  101. {
  102.         register struct name *  np;
  103.  
  104.  
  105.         for (np = namehead.n_next; np; np = np->n_next)
  106.                 check(np);
  107. }
  108.  
  109.  
  110. /*
  111.  *      Check the target .PRECIOUS, and mark its dependentd as precious
  112.  */
  113. void
  114. precious(void)
  115. {
  116.         register struct depend *        dp;
  117.         register struct line *          lp;
  118.         register struct name *          np;
  119.  
  120.  
  121.         if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
  122.                 return;
  123.  
  124.         for (lp = np->n_line; lp; lp = lp->l_next)
  125.                 for (dp = lp->l_dep; dp; dp = dp->d_next)
  126.                         dp->d_name->n_flag |= N_PREC;
  127. }
  128.  
  129.  
  130.  
  131.